void SupMD (ImSize, VarFac, Ch0,Ch1,Ch2, ClasIm, TrainFile)
int   ImSize;
float VarFac;
BYTE  ** Ch0;
BYTE  ** Ch1;
BYTE  ** Ch2;
BYTE  ** ClasIm;
char  TrainFile[];
{
   int    r,c, r0,c0, i,NofTrn, WinSize;
   float  M0,M1,M2, D0,D1,D2, V0,V1,V2;
   float  M0tot,M1tot,M2tot, V0tot,V1tot,V2tot;
   float  Dist, Border;
   FILE   *Stream;

   Stream = fopen (TrainFile, "r");
   fscanf (Stream, "%d%d", &NofTrn, &WinSize);

   M0tot = M1tot = M2tot = (float)0;
   V0tot = V1tot = V2tot = (float)0;

   for (i=0; i<NofTrn; i++) {
      fscanf (Stream, "%d%d", &r0,&c0);
      ChanMean (WinSize, r0,c0, Ch0,Ch1,Ch2, &M0,&M1,&M2);
      ChanVar  (WinSize, r0,c0, Ch0,Ch1,Ch2, M0,M1,M2, &V0,&V1,&V2);
      M0tot += M0;   V0tot += V0;
      M1tot += M1;   V1tot += V1;
      M2tot += M2;   V1tot += V2;
   }
   fclose (Stream);
   M0tot /= NofTrn;  V0tot /= NofTrn;
   M1tot /= NofTrn;  V1tot /= NofTrn;
   M2tot /= NofTrn;  V2tot /= NofTrn;

   Border = max (V0tot, max(V1tot,V2tot));
   Border *= (float)VarFac;

   for (r=0; r<ImSize; r++) {
      for (c=0; c<ImSize; c++) {
         D0 = M0tot - Ch0[r][c];  D0 *= D0;
         D1 = M1tot - Ch1[r][c];  D1 *= D1;
         D2 = M2tot - Ch2[r][c];  D2 *= D2;

         Dist = (float) sqrt ((double) D0 + D1 + D2);

         if (Dist <= Border)  ClasIm [r][c] = 255;
                        else  ClasIm [r][c] = 0;
}  }  }
